package com.dongliusuo.orangeforms.webadmin.app.dto;

import com.dongliusuo.orangeforms.common.core.validator.UpdateGroup;
import com.dongliusuo.orangeforms.common.core.validator.ConstDictRef;
import com.dongliusuo.orangeforms.application.common.constant.BankCardType;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import jakarta.validation.constraints.*;

/**
 * 客户银行卡数据Dto对象。
 *
 * @author DongLiusuo
 * @date 2025-01-08
 */
@Schema(description = "客户银行卡数据Dto对象")
@Data
public class CustomerAccountDto {

    /**
     * 编号。
     */
    @Schema(description = "编号。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "数据验证失败，编号不能为空！", groups = {UpdateGroup.class})
    private Long accountId;

    /**
     * 客户编号。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "客户编号。可支持等于操作符的列表数据过滤。")
    private Long customerId;

    /**
     * 账户类型：借记卡、贷记卡。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "账户类型：借记卡、贷记卡。可支持等于操作符的列表数据过滤。")
    @ConstDictRef(constDictClass = BankCardType.class, message = "数据验证失败，账户类型：借记卡、贷记卡为无效值！")
    private String accountType;

    /**
     * 账户号。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "账户号。可支持等于操作符的列表数据过滤。")
    private String accountNo;

    /**
     * 所属银行。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "所属银行。可支持等于操作符的列表数据过滤。")
    private String belongBank;

    /**
     * 开户行。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "开户行。可支持等于操作符的列表数据过滤。")
    private String openAccountBack;

    /**
     * 开户姓名。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "开户姓名。可支持等于操作符的列表数据过滤。")
    private String openAccountName;

    /**
     * 开户手机号。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "开户手机号。可支持等于操作符的列表数据过滤。")
    private String openAccountPhone;

    /**
     * account_no / open_account_name / open_account_phone LIKE搜索字符串。
     * NOTE: 可支持LIKE操作符的列表数据过滤。
     */
    @Schema(description = "LIKE模糊搜索字符串")
    private String searchString;
}
